import { Constructor, Node } from "cc";
import { ProxyBase } from "./ProxyBase";
import { ProxyWnd } from "./ProxyWnd";
import { Prefab } from "cc";
import { Asset } from "cc";


/**
 * 代理元数据接口
 */
export interface ProxyMeta {
    /** 
     * bundle名字 
     */
    bundle: string;
    /** 
     * 资源路径 
     */
    path: string;
    /** 
     * 代理名字 
     */
    proxyName: string;
    /** 
     * 窗口构造函数 
     */
    ctor: Constructor<ProxyWnd<ProxyBase>>;
}

/**
 * 代理属性控制器数据接口
 */
export interface CtrlData {
    /** 
     * 控制器属性名 
     */
    propertyKey: string;
    /** 
     * 控制器的值 
     */
    ctrlValues: number[];
}

/**
 * 代理的资源和所有引用实例
 */
export interface ProxyData {
    /** 
     * 代理预制件 
     */
    prefab: Prefab
    /** 
     * 所有动态加载的资源
     * key=bunlde:path
     * value=资源实例
     */
    assetMap: Map<string, Asset>;
    /** 
     * 当前代理的所有窗口
     * key=uuid
     * value=wnd
     */
    wndMap: Map<string, ProxyWnd<ProxyBase>>;
    /** 
     * 当前代理的所有子窗口
     * key=uuid
     * value=sub_proxyName_uuid[]
     */
    subWndMap: Map<string, { proxyName: string, uuid: string }[]>
    /** 
     * 资源加载计数
     */
    loadingCount: number;
}
